//
//  UITableViewCell+DWAutoHeight.h
//  DWCellHeightDemo
//
//  Created by 吴涛 on 16/2/15.
//  Copyright © 2016年 Duke.Wu. All rights reserved.
//

#import <UIKit/UIKit.h>

/**
 *  用来模拟cell赋值后
 *
 *  @param cell 需要调整高度的cell
 */
typedef void(^DWCellConfigBlock)(UITableViewCell *cell);

typedef NSDictionary *(^DWCacheHeight)();

/**
 *	唯一键，通常是数据模型的id，保证唯一
 */
static NSString *const kDWCacheUniqueKey = @"kDWCacheUniqueKey";

/**
 *	对于同一个model，如果有不同状态，而且不同状态下高度不一样，那么也需要指定
 */
static NSString *const kDWCacheStateKey = @"kDWCacheStateKey";

/**
 *	用于指定更新某种状态的缓存，比如当评论时，增加了一条评论，此时该状态的高度若已经缓存过，则需要指定来更新缓存
 */
static NSString *const kDWRecalculateForStateKey = @"kDWRecalculateForStateKey";


@interface UITableViewCell (DWAutoHeight)

/**
 *  最下面的一个子控件，主要用来计算高度
 *  不能为空
 */
@property (nonatomic, strong) UIView *dw_bottomView;

/**
 *  底部视图距cell底部的高度，可不用设置
 */
@property (nonatomic, assign) CGFloat dw_bottomOffsetToCell;

/**
 *  返回cell 高度
 *
 *  @param indexPath cell indexPath
 *  @param config    进行cell配置数据，必须实现
 *
 *  @return cell高度
 */
+ (CGFloat)dw_heightForIndexPath:(NSIndexPath *)indexPath config:(DWCellConfigBlock)config;

/**
 *
 *	此API会缓存行高
 *
 *	@param tableView 必传，为哪个tableView缓存行高
 *	@param config 必须要实现，且需要调用配置数据的API
 *	@param cache  返回相关key
 *
 *	@return 行高
 */
+ (CGFloat)dw_heightForTableView:(UITableView *)tableView
                           config:(DWCellConfigBlock)config
                            cache:(DWCacheHeight)cache;

@end
